import { getInitialData } from 'ice';
import type { AxiosError } from 'axios';
import { processingErr } from './errutil';

export default {
  request: {
    onConfig: (config) => {
      if (!config?.headers?.Authorization && !config.ignoreAuth) {
        const initData = getInitialData();
        // 发送请求前：可以对 RequestConfig 做一些统一处理
        const token = initData?.token || '';
        config.headers = {
          ...config.headers,
          Authorization: token,
        };
      }
      return config;
    },
    onError: (error) => {
      return Promise.reject(error);
    },
  },
  response: {
    onConfig: (response) => {
      const { success, msg, code } = response.data || {};
      // 请求成功：可以做全局的 toast 展示，或者对 response 做一些格式化
      if (!success) {
        const error: any = new Error();
        error.response = response;
        processingErr(error);
        return Promise.reject(error);
      }
      // 接口请求成功，只获取data
      return response.data || {};
    },
    throwOnError: true,
    onError: (error: AxiosError) => {
      processingErr(error);
      return Promise.reject(error);
    },
  },
};
